package com.zz.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zz.common.R;
import com.zz.dto.ActivityDto;
import com.zz.entity.Activity;

import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 社团活动
 * @author
 */
public interface ActivityService  extends IService<Activity> {
    /**
    * 活动信息分页查询
    * */
    R<Page> page(int page, int pageSize, @Nullable String name);

    /**
    * 展示距今最近时间的start-end范围内活动
    * */
    R<List<ActivityDto>> showLatestActivity(int start, int end);

    /**
    * 用户报名参加活动
    * */
    R<String> applyActivity(Activity activity, HttpServletRequest request);

    /**
    * 展示所有社团申请举办活动的信息
     */
    R<List<Activity>> showApplication(String activityName);

    /**
    * 学校管理员：同意活动申请
    * */
    R<String> agree(Activity activity);

    /**
     * 学校管理员：拒绝活动申请
     * */
    R<String> decline(Activity activity);

    /**
    * 活动草稿箱：增加活动
    * */
    R<String> addActivity(Activity activity, HttpServletRequest request);

    /**
    * 活动草稿箱：删除活动
    * */
    R<String> deleteActivity(Activity activity);

    /**
    * 活动草稿箱：编辑活动
    * */
    R<String> editActivity(Activity activity);

    /**
    * 社团草稿箱：活动分页展示
    * */
    R<Page> activityList(int page, int pageSize, String activityName, HttpServletRequest request);

    /**
    * 社团负责人：申请举办活动
    * */
    R<String> applyActivity(Activity activity);

    /**
    * 社团负责人：撤销举办活动的申请
    * */
    R<String> cancelActivity(Activity activity);

    /**
    * 社团负责人：展示已经被审核通过的活动
    * */
    R<Page> approvedActivity(int page, int pageSize, HttpServletRequest request);

    /**
     * 社团负责人：展示已经被审核驳回的活动
     * */
    R<Page> notApprovedActivity(int page, int pageSize, HttpServletRequest request);

    /**
    * 社团负责人：展示已申请待审核的活动
     */
    R<Page> reviewedActivity(int page, int pageSize, HttpServletRequest request);

    /**
    * 展示活动详情
    * */
    R<ActivityDto> activityInfo(int activityId);

    /**
    * 根据活动类别查看活动
    * */
    R<List<ActivityDto>> showByClassify(String classify);

}
